// 登录初始化及功能实现

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include "LoginManage.h"
#include "../util/XTime.h"


char loginUserName[10] = {0}; // 存放登录用户名

void UserLoginInit(FILE *filePointer, ListPointer head) // 用户登录初始化函数
{
    struct Staff *staffData; // 定义一个结构体指针
    // 分配空间
    staffData = (struct Staff *)malloc(sizeof(struct Staff));
    staffData->staffNo = 1000;                  // 初始化超级管理员的参数
    strcpy(staffData->staffName, "admin");      // 拷贝管理员名称
    strcpy(staffData->staffPassword, "111111"); // 拷贝管理员密码
    staffData->StaffRole = 2;                   // 管理员身份
    staffData->StaffState = 1;                  // 管理员状态 1. 正常 0. 禁用
    LinkedListAdd(head, staffData);             // 添加到链表
    // 数据写入内存
    FileWrite(filePointer, head, sizeof(struct Staff), 0);
}

// 登录
int UserLogin(ListPointer head) // 用户登录函数
{
    int year;
    int month;
    int day;
    char name[10] = {0};    // 存放输入的用户名
    char password[8] = {0}; // 存放输入的密码
    char role[3][10] = {"服务员", "经理", "管理员"};
    struct Staff *data;
    ListPointer listPointer;

    // 获取当前时间
    NowYMD(&year, &month, &day);

    while (1)
    {
        system("cls");
        printf("\n\n\n\t\t*************** 系统登录界面 ***************\n\n\n");
        printf("\t\t\t%-19s", "用户名：");
        printf("(10位)");
        printf("\n\n\t\t\t%-19s", "密  码：");
        printf("(6位)");
        printf("\n\n\n\t\t*********** 当前日期: %4d-%02d-%02d ***********", year, month, day);
        SetCursorPosition(6, 32);                    // 光标定位到用户名输入的位置
        FormatInputString(name, 0, 0, 10, 1);        // 控制输入函数，只能输入字母
        SetCursorPosition(8, 32);                    // 定位到密码输入的位置
        FormatInputString(password, '0', '9', 6, 2); // 只能输入数字
        listPointer = head->listNext;
        while (listPointer)
        {
            data = (struct Staff *)(listPointer->listData);
            if ((strcmp(data->staffName, name) == 0) && (strcmp(data->staffPassword, password) == 0))
            {
                strcpy(loginUserName, data->staffName); // 存储登陆用户名
                printf("\n\n\n\n\n\n\n\t\t=== > 登录成功，身份为：%s，按任意键继续...",
                       role[data->StaffRole]);
                getch();
                return data->StaffRole; // 返回用户角色标志
            }
            listPointer = listPointer->listNext;
        }
        printf("\n\n\n\n\n\n\n\t\t=== > 密码输入错误，请重新输入，按任意键继续...");
        memset(password, 0, sizeof(char));
        getch();
    }
}

// 清空行
void CleanRow(int row1, int row2)
{
    int i, j;
    for (i = row1; i <= row2; i++)
    {
        SetCursorPosition(i, 0);
        for (j = 0; j <= 80; j++)
        {
            printf("%c", ' ');
        }
    }
}

// 设置光标位置
void SetCursorPosition(int xPoint, int yPoint)
{
    HANDLE handleOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD position = {yPoint, xPoint};
    SetConsoleCursorPosition(handleOut, position);
}
